#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
#include<stdlib.h>
#include<unistd.h>
#include<wait.h>

#include <string.h>

#include <fcntl.h>

#include <sys/shm.h>
#include <sys/msg.h>

#define MAX 100

// Estructura para los mensajes
// 
struct un_msgbuf {
  long mtype;
  char mtext[MAX+1];
}  mq_test_buf;


main() {
  key_t unique_key;
  int id;
  int i;
  int sin_dato = 0;
// Creacion de una llave unica
  unique_key = ftok("/tmp/fichero_ola_mensaje", 'C'); 

  // Creacion de la cola de mensajes
  id = msgget(unique_key, IPC_CREAT | 0666);
  printf("Identificador de la cola de mensajes=%d\n", id);
  if (id == -1) {
    printf("Error creando o conectando a la cola de mensajes\n");
    exit(1);
  }

  // Recepción de mensaje:
  while(1){
  sleep(1);
  mq_test_buf.mtext[0] = 0;  // zap out, so we are sure that we receive data
  i = msgrcv(id, (struct msgbuf *)&mq_test_buf, MAX+1, 123,0);
  if (i == -1) { 
    printf("No hay ningun mensaje de tipo 123 disponible.\n");
    sin_dato = 1;
  } else{
  	printf("--------------------MENSAJE RECIBIDO---------------------\n");
    printf("%s\n", mq_test_buf.mtext);
    printf("--------------------------------------------------------\n");
  } 
  
  if (sin_dato == 1) break;
  }

  // Eliminamos la cola
  msgctl(id, IPC_RMID, 0);
}

